#类型转换、深浅复制
#python3 有6大标准的数据类型
"""
1.Number  数字：int float bool complex

2.String  字符串   str()

3.List    列表     list()

4.Tuple   元组     tuple()

5.Set     集合     set()

6.Dictionary 字典  dict()
"""
#类型转换的特性：想要获取什么的类型，就用什么样的函数即可。
#注意转换成字典时的特殊要求，如下：
a=['a1','a2','a3','a4']
b=['b1','b2','b3']
d=zip(a,b)  #用zip把两个列表进行打包绑定，然后再转换为字典
print(dict(d))
print('\n')


#深浅复制

#什么是传递引用
a = 10
b = 10
print(id(a))  #查看a的内存地址
print(id(b))  #查看b的内存地址
#当两个变量的数值相同时，他们共用一个内存空间
#也就是b没有重复存放10这个数据，而是引用了a的内存地址。即b = 10的指针实际上是指向了a的内存地址。
print('\n')

#拷贝 ：备份，就是在内存中开辟一个空间，存储相同的值
import copy
a = [1,2,3,4,5]
a_copy = copy.copy(a) #复制a的信息
print(id(a))
print(id(a_copy)) #拷贝后，内存地址不同
print('\n')


#深复制（深拷贝）：完全复制，如日常备份，数据不会随原数据改变而改变。
import copy
a = [1,2,3,[4,5,6]]
a_deepcopy=copy.deepcopy(a)
print(a_deepcopy)
#深复制，修改原数据不会对复制后的数据产生影响
print('\n')


#浅复制（浅拷贝） ：数据半共享，复制数据会独立存放，但是只是拷贝成功到原数据的第一层，也就是拷贝后的第二层数据会随原数据改变。
import copy
a = [1,2,3,[4,5,6]]
a_copy=copy.copy(a)
print(a,id(a))
print(a_copy,id(a_copy))
print('------------------------------------')
#修改第一层数据
a[0] = 5
print(a,id(a))
print(a_copy,id(a_copy))  #没有随原数据的变化而发生变化。
print('------------------------------------')
#修改第二层数据
a[3][1] = 100
print(a,id(a))
print(a_copy,id(a_copy))  #第二层原数据发生变化，浅复制数据也发生变化。
#浅复制的应用场景--日常办公中，在一个表中的数据需要随着来源数据的改变而改变，需要实时更新。




